# -*- coding: utf-8 -*-
"""
Created on 03 08 下午4:55 2022 
@Author : HHQUAN
@Email : 1075960398@qq.com
绘制接收机工作特性曲线ROC
"""

import mpl_toolkits.axisartist as axisartist
import matplotlib.pyplot as plt
import numpy as np
from scipy import special

# 高斯分布，这里仅展示方差的影响，均值的效果是一样的
s1 = [0.5**2, 2.5**2, 4.5**2, 6.5**2, 9.5**2]
s2 = [0.6**2, 2.3**2, 3.5**2, 6.2**2, 9.1**2]
plt.figure()
for sigma1, sigma2 in zip(s1, s2):
    mu1, sigma1 = 4.0, sigma1
    x1 = np.arange(mu1-15, mu1+15, 0.1)
    y1 = 1/(np.sqrt(2*np.pi*sigma1))*np.exp(-(x1-mu1)**2/(2*sigma1))

    mu2, sigma2 = 0.0, sigma2
    x2 = np.arange(mu2-15, mu2+15, 0.1)
    y2 = 1/(np.sqrt(2*np.pi*sigma2))*np.exp(-(x2-mu2)**2/(2*sigma2))

    z1 = np.arange(-5, 15, 0.1)
    # erfc = [x, +∞]， erf = [ -∞, x]
    # 实质上描述的是两类错误概率，假如前者为噪声门限，后者为语音门限
    # roc1表示的是： 实际是噪声，判断为语音的第一类错误
    # roc2表示的是： 实际是语音，判断为噪声的第二类错误
    roc1 = special.erfc((z1-mu1)/np.sqrt(sigma1))
    roc2 = special.erf((z1-mu2)/np.sqrt(sigma2))
    plt.plot(roc1, roc2)

plt.grid(True, linestyle='--', color='gray', linewidth=0.8)
plt.xlabel("ERROR 2 category")
plt.ylabel("ERROR 1 category")
plt.title("ROC curve")
plt.show()

